package com.itheima;

/**
 * 2025/4/14 20:57
 */
public class TestPoly {
    public static void main(String[] args) {

        //编译看左侧，运行看右侧
        Animal dog = new Dog();
        dog.sound();

        //自动类型转换
        Animal a1 = new Dog();
//        int a = 123;
//        //表示范围小的数据类型可以直接赋值给表示范围大的类型
//        long l = a;
//        //表示范围大的数据类型不可以直接赋值给表示范围小的类型
//        //强制类型转换
//        a = (int)l;

        //编译看左侧，运行看右侧
        a1.sound();
        Animal animal = new Animal();
        Animal cat = new Cat();
        show(animal);//Animal sound
        show(dog);//汪汪汪
        show(cat);//喵喵喵
    }

    //灵活匹配
    public static void show(Animal animal) {
        animal.sound();
        //在强制类型转换的时候，为了避免ClassCastException错误，需要先判断当前对象的真实类型，如果类型匹配，然后再强转
        //新一个关键词（字） instanceof
        //判断当前对象是否是Dog类型
        if (animal instanceof Dog) {
            //健壮性很好
            Dog dog = (Dog) animal;
            dog.watchHome();
        }
        if (animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }

    }

}
